package com.canyou.archives.util;

import org.springframework.util.StringUtils;

import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;

public class StrUtils {
    //设置为常量，提高可扩展性
    private static final String DEFAULT_PATTERN = "yyyy-mm-dd";

    /***
     * 传入字符串集合返回字符串
     * @param list
     * 传入类型 list：字符串集合
     * @param separator
     * char：传入的分隔符
     * @return 减一天：2014-11-23或(加一天：2014-11-25)
     */
    public static String listToString(List list, char separator) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            if (i == list.size() - 1) {
                sb.append(list.get(i));
            } else {
                sb.append(list.get(i));
                sb.append(separator);
            }
        }
        return sb.toString();
    }


    /***
     * 日期减一天、加一天
     *
     * @param option
     * 传入类型 pro：日期减一天，next：日期加一天
     * @param _date
     * 2014-11-24
     * @return 减一天：2014-11-23或(加一天：2014-11-25)
     */

    public static String checkOption(String option, String _date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cl = Calendar.getInstance();
        Date date = null;
        try {
            date = (Date) sdf.parse(_date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        cl.setTime(date);
        if ("pre".equals(option)) {
            // 时间减一天
            cl.add(Calendar.DAY_OF_MONTH, -1);
        } else if ("next".equals(option)) {
            // 时间加一天
            cl.add(Calendar.DAY_OF_YEAR, 1);
        } else {
            // do nothing
        }
        date = cl.getTime();
        return sdf.format(date);
    }
    /***
     * 日期减一天、加一天
     *
     * @param option
     * 传入类型 pro：日期减一天，next：日期加一天
     * @param _date
     * 2014-11-24
     * @return 减一天：2014-11-23或(加一天：2014-11-25)
     */

    public static String checkOption(String option, Date _date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cl = Calendar.getInstance();
        cl.setTime(_date);
        if ("pre".equals(option)) {
            // 时间减一天
            cl.add(Calendar.DAY_OF_MONTH, -1);
        } else if ("next".equals(option)) {
            // 时间加一天
            cl.add(Calendar.DAY_OF_YEAR, 1);
        } else {
            // do nothing
        }
        _date = cl.getTime();
        return sdf.format(_date);
    }

    // 1.将日期转换成字符串
    public static String dateToString(Date date, String pattern) {
        // 判断pattern是否为空,利用工具类
        if(StringUtils.isEmpty(pattern)){
           // 如果为空，设置默认格式
            pattern = DEFAULT_PATTERN;
        }

        SimpleDateFormat sd = new SimpleDateFormat();
        sd.applyPattern(pattern);
        String res = sd.format(date);
        return res;
    }

    // 2.字符串转成日期
    public static Date stringToDate(String str, String pattern) throws Exception {
        // 判断pattern是否为空,利用工具类
        if (StringUtils.isEmpty(pattern)) {
            // 如果为空，设置默认格式
            pattern = DEFAULT_PATTERN;
        }

        SimpleDateFormat sd = new SimpleDateFormat();
        sd.applyPattern(pattern);
        Date res = sd.parse(str);
        return res;
    }

    //length用户要求产生字符串的长度
    public static String getRandomString(int length){
        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<length;i++){
            int number=random.nextInt(62);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }

    //可以指定字符串的某个位置是什么范围的值:可以指定某个位置是a-z、A-Z或是0-9
    public static String getRandomString2(int length){
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<length;i++){
            int number=random.nextInt(3);
            long result=0;
            switch(number){
                case 0:
                    result=Math.round(Math.random()*25+65);
                    sb.append(String.valueOf((char)result));
                    break;
                case 1:
                    result=Math.round(Math.random()*25+97);
                    sb.append(String.valueOf((char)result));
                    break;
                case 2:
                    sb.append(String.valueOf(new Random().nextInt(10)));
                    break;
            }


        }
        return sb.toString();
    }

    /***
     *截取字符串（专门截取七牛云的返回地址）
     * @param str
     * 传入类型 pro：七牛云地址
     * @return 字符串：编译后的七牛云文件名
     */
    public static String stringToString(String str)throws Exception{
        String[] strings = str.split("\\?");
        String address= strings[0].split("//")[1];
        String add= address.split("/")[1];
        //反编译
        String decode = URLDecoder.decode(add, "utf-8");
        return decode;
    }

    public static void main(String[] args) throws Exception {
      String s="http://rush-answer.a100.net/2021%2F10%2F27%2Fc821e3e7d4be48dfa2e436046f644b6f.png";
        String s1 = stringToString(s);
        System.out.println(s1);
    }

}
